package com.youdoneed.news.news.dao;

import com.youdoneed.news.news.entity.CmfAuthors;
import com.youdoneed.news.news.entity.CmfPosts;
import com.youdoneed.news.news.entity.CmfPostsWithBLOBs;
import com.youdoneed.news.news.entity.CmfTermRelationships;
import com.youdoneed.news.news.vo.*;
import com.youdoneed.user.model.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper
public interface CmfPostsMapper {
    int deleteByPrimaryKey(Long id);

    int insert(CmfPostsWithBLOBs record);

    int insertSelective(CmfPostsWithBLOBs record);

    CmfPostsWithBLOBs selectByPrimaryKey(Long id);

    int updateByPrimaryKeySelective(CmfPostsWithBLOBs record);

    int updateByPrimaryKeyWithBLOBs(CmfPostsWithBLOBs record);

    int updateByPrimaryKey(CmfPosts record);

    /**
     * 获取新闻详情，包含头文件信息
     *
     * @param id
     * @return
     */
    CmfPostsDtlVo getPostDetailById(Long id);

    /**
     * 获取好友浏览过的新闻列表
     *
     * @param friendsList
     * @return
     */
    List<CmfPostsListOfFriends> getReadOfFriends(@Param("friendsList") List<User> friendsList);

    /**
     * 获取热评新闻列表
     *
     * @return
     */
    List<CmfPostsListVo> getHotCommentNews(@Param("relList") List<CmfTermRelationships> relationships, @Param("userId") String userId);

    /**
     * 根据关键字搜索新闻列表
     *
     * @return
     */
    List<CmfPostsListVo> getPostByKeywords(@Param("keyWords") String keyWords, @Param("pageSize") Integer pageSize, @Param("lastTime") Integer lastTime);

    /**
     * 获取指定时间前的关注新闻
     *
     * @return
     */
    List<CmfPostsListVo> getFocusNewsBeforeTime(@Param("authors") List<CmfAuthors> authors, @Param("beforeTime") Integer beforeTime);


    /**
     * 获取指定时间后的关注新闻
     *
     * @param lastTime
     * @return
     */
    List<CmfPostsListVo> getFocusNewsAfterTime(@Param("authors") List<CmfAuthors> authors, @Param("lastTime") Integer lastTime);

    /**
     * 获取列表内的新闻
     *
     * @param ids
     * @return
     */
    List<CmfPostsListVo> getNewsByIds(@Param("ids") List<Long> ids);


    /**
     * 根据关键字搜索视频列表
     *
     * @param keyWords
     * @return
     */
    List<CmfPostsListVo> searchForVideos(@Param("newsType") String newsType, @Param("keyWords") String keyWords);

    /**
     * 按栏目获取趣视频列表
     *
     * @param relationships
     * @return
     */
    List<CmfVideoListVo> getJokeVideos(@Param("relList") List<CmfTermRelationships> relationships, @Param("keyWords") String keyWords);

    /**
     * 按栏目获取趣视频列表
     *
     * @param relationships
     * @return
     */
    List<CmfVideoListVo> getRecommendedJokeVideos(@Param("relList") List<CmfTermRelationships> relationships, @Param("keyWords") String keyWords);

    /**
     * 指定条数趣闻推荐
     *
     * @param termRel
     * @param pageSize
     * @return
     */
    List<CmfPostsListVo> searchForJokes(@Param("termRel") List<CmfTermRelationships> termRel, @Param("pageSize") Integer pageSize);

    /**
     * 根据id获取新闻列表
     *
     * @return
     */
    CmfPostsListVo getRecommendedNews(Long id);

    /**
     * 根据id获取视频详情
     */
    CmfPostsListVo getVideoDetailById(Long id);

    /**
     * 根据ID获取新闻列表
     *
     * @param id
     * @return
     */
    CmfPostsListVo getPostsListById(Long id);

    /**
     * 获取推荐趣视频
     *
     * @return
     */
    List<CmfPostsListVo> getRecommendedVideos();

    /**
     * 获取最新评论数
     *
     * @param ids
     * @return
     */
    List<CmfCommentCountVo> reloadCommentCount(@Param("ids") List<Long> ids);

    /**
     * PC后台按标题搜索新闻
     *
     * @param keyWords
     * @return
     */
    List<CmfFindNewsVo> findNewsByKeywords(@Param("keyWords") String keyWords, @Param("lastTime") Integer lastTime, @Param("pageSize") Integer pageSize);

    /**
     * 批量查询新闻
     *
     * @param ids
     * @return
     */
//    List<CmfPostsListVo> getNewsBatch(@Param("ids") List<Long> ids);
}